Git de commit geschiedenis inspecteren
Home

Git de commit geschiedenis inspecteren

Git de commit geschiedenis inspecteren

Nadan je verschillende 'commits' hebt uitgevoerd is het nuttig om een overzicht te hebben van alles wat er sinds de eerste commit gebeurd is. De basisinstructie hiervoor is git log.

Wat hieraan voorafgaat

Je hebt Git bestanden neerleggen doorlopen.

Bron

git-log - Show commit logs

Viewing the Commit History

Inleiding

Nadat je de bestanden hebt neergelegd en voer je git log uit. Zonder argumenten toont de instructie git log de commits, die in de repository staan, in omgekeerde chronologische volgorde. Dat wil zeggen, de meest recente commits staan eerst. Zoals je kan zien, toont dit commando iedere commit met zijn SHA-1 checksum, de auteursnaam en e-mail (als die is opgegeven, zie daarvoor Git configuren, ik heb die nog niet opgegeven), de datum en boodschap van de commit.

krijg je hetvolgde te zien:

Git - log om een lijst van de uitgevoerde commits te tonen
Git - log om een lijst van de uitgevoerde commits te tonen

Er zijn massa's opties beschikbaar voor het git log commando om je precies te laten zien wat je zoekt. Hier bespreek ik een aantal van de meest populaire opties.

Een van de meest nuttige opties is -p, waarbij je het verschil in elke commit kan visualisern. Je kan ook gebruik maken van -2, die de output beperkt tot alleen de laatste twee items. Om de log te verlaten typ je q. Je typt z om naar het einde van de log te springen.

Git - commit geschiedenis inspecteren twee ver
Git - commit geschiedenis inspecteren twee ver

Deze optie toont dezelfde informatie, maar met een diff direct na elke vermelding. Dit is erg handig voor een code review of om snel te bladeren door een serie commits die een medewerker heeft toegevoegd.

Je kan ook gebruik maken van een serie samenvattende opties met git log. Bijvoorbeeld, als je overzichtelijke statistieken wilt zien voor iedere commit, dan maak je gebruik van de --stat optie:

Git - log --stat
Git - log --stat

De --stat optie toont onder iedere commit een lijst van gewijzigde bestanden, hoeveel bestanden werden veranderd, en hoeveel regels in die bestanden zijn toegevoegd en verwijderd. Aan het eind toont het een samenvatting van de informatie.

Een andere handige optie is --pretty. Deze optie verandert de log output naar een opgegeven format. De oneline optie drukt iedere commit op een enkele regel. Dat is handig als door een hele hoop commits moet bladeren. De opties, [short], [full], en [fuller], kan in ongeveer hetzelfde formaat, maar met minder of meer informatie, opgeven:

Git - log --pretty=oneline =short =full =fuller
Git - log --pretty=oneline =short =full =fuller

Een interessante optie is format, waarmee je je eigen log output formaat kan opgeven. Dit kan handig zijn als je output voor machine parsing wil genereren:

Git - log --pretty=format
Git - log --pretty=format
Table 1. Opties voor git log --pretty=format
Optie Beschrijving van de output
%H Commit hash
%h Abbreviated commit hash
%T Tree hash
%t Abbreviated tree hash
%P Parent hashes
%p Abbreviated parent hashes
%an Author name
%ae Author e-mail
%ad Author date (format respects the –date= option)
%ar Author date, relative
%cn Committer name
%ce Committer email
%cd Committer date
%cr Committer date, relative
%s Subject

Je kunt je afvragen wat het verschil is tussen de auteur en de committer. De auteur is de persoon die het werk oorspronkelijk schreef, terwijl de committer de persoon is die het laatst het werk neergelegd heeft. Dus, als je een patch naar een project instuurt en één van de kernleden de repo legt die neer, kan krijgen jullie beiden, jij als auteur, en het kernlid als de committer. We zullen dit onderscheid verder bespreken als we het hebben over gedistribueerde Git.

De oneline en het format opties zijn vooral nuttig in combinatie met een andere log optie genaamd --graph. Deze optie maakt een mooie ASCII grafiek waarin de branch en merge geschiedenis wordt gevisualiseerd:

git log --pretty=format:"%h %s" --graph

Dat zijn slechts enkele eenvoudige output-format opties voor log git. Er zijn er nog veel meer. Hier volgt een lijst van de meest courante:

Table 2. Common options to git log
Option Description
-p Show the patch introduced with each commit.
--stat Show statistics for files modified in each commit.
--shortstat Display only the changed/insertions/deletions line from the --stat command.
--name-only Show the list of files modified after the commit information.
--name-status Show the list of files affected with added/modified/deleted information as well.
--abbrev-commit Show only the first few characters of the SHA-1 checksum instead of all 40.
--relative-date Display the date in a relative format (for example, “2 weeks ago”) instead of using the full date format.
--graph Display an ASCII graph of the branch and merge history beside the log output.
--pretty Show commits in an alternate format. Options include oneline, short, full, fuller, and format (where you specify your own format).

De Log Output beperken

In aanvulling op output-format opties, beschikt git log ook over een aantal limiterende opties. Dat wil zeggen, opties waarmee je de output kan beperken tot een subset van de commits. Je hebt een dergelijke optie al gezien - de -2 optie, die slechts de laatste twee commits laat zien. De -<n> optie, waarbij n een geheel getal, ge je waarschijnlijk niet vaak gebruiken, omdat Git standaard alle output door een pager laat lopen zodat je slechts één pagina log-output tegelijk ziet.

De in de tijd beperkende opties zoals --since en --until zijn zeer nuttig. Bijvoorbeeld, deze opdracht toon de lijst van commits in de afgelopen twee weken:

$ Git log --since=2.weeks

Dit commando werkt met veel formats - je kan een specifieke datum zoals "2008-01-15", of een relatieve datum opgeven, zoals "2 jaar 1 dag 3 minuten geleden".

Je kan de lijst van commits filteren op overeenkomen met een aantal zoekcriteria. Met de --author optie kan je filteren op een specifieke auteur, en met de --grep optie kan jezoeken naar trefwoorden in de commit berichten. Als je de --author en --grep opties opgeeft, moet je --all-match toe voegen.

Een andere filter is de -S optie die een string aanneemt en alleen de commits toont die een wijziging in de code, die toegevoegd of verwijderd die string introduceerde, toont. Bijvoorbeeld, als je op zoek bent naar de laatste commit die een verwijzing naar een specifieke functie toevoegde of verwijderde, voer je het volgende commando uit:

$ git log -Sfunction_name

Je kan aan git log ook filter opgeven die een pad bevat. Als je een map of bestandsnaam opgeeft, kan je de log output beperken tot commits die een verandering introduceerden met betrekking tot de opgegeven bestanden en paden. Dit is altijd de laatste optie in de rij en wordt gewoonlijk voorafgegaan door dubbele streepjes (-) om de paden te scheiden van de opties.

Opties om de output van git log te beperken
Option Description
-(n) Show only the last n commits
--since, --after Limit the commits to those made after the specified date.
--until, --before Limit the commits to those made before the specified date.
--author Only show commits in which the author entry matches the specified string.
--committer Only show commits in which the committer entry matches the specified string.
--grep Only show commits with a commit message containing the string
-S Only show commits adding or removing code matching the string

Bijvoorbeeld, als je wil zien welk testbestanden in de Git broncode geschiedenis zijn veranderd in de maand oktober 2016 neergelegd door Jef Inghelbrecht en er waren geen samenvoegingen, kun je zoiets als dit uitvoeren:

git log --pretty="%h - %s" --author=Jef Inghelbrecht --since="2017-10-01" \ --before="2016-11-01" --no-merges -- t/

JI
2017-01-25 17:45:41